<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // 面向过程  一个问题

        // 面向对象  一类问题


        // const dog = '柯基' ;
        // const age = 2 ;
        // console.log('有一只' + age + '岁的' + dog);

        // 最终的解决方案  -- 封装函数
        // function dog(name , age) {
        //     console.log('有一只' + age + '岁的' + dog);
        // }


        // const obj = {
        //     name : '柯基' ,
        //     age : 2 ,
        //     say : function() {
        //         console.log('有一只' + this.age + '岁的' + this.dog);
        //     }
        // }

        // const obj = {
        //     name : '泰迪' ,
        //     age : 3 ,
        //     say : function() {
        //         console.log('有一只' + this.age + '岁的' + this.dog);
        //     }
        // }


        // 工厂模式 -- 创建对象
        // function dog(name , age) {
        //     // let a = 2 ;
        //     const obj = {
        //         name ,
        //         age ,
        //         say : function() {
        //             console.log('有一只' + this.age + '岁的' + this.name);
        //         }
        //     }
        //     return obj
        // }


        // const d1 = dog('柯基' , 3)    
        // // d1.say()

        // const d2 = dog('柯基' , 3)    


        // const d3 = dog('柯基' , 3)      


        // console.log(d1.say == d2.say);   // false    方法 内存不共享

        // // console.log(d1 instanceof dog) ;   // false    血缘关系



        

        function dog(name, age) {
            const obj = {};
            obj.name = name;
            obj.age = age;
            obj.say = function () {
                console.log('有一只' + this.age + '岁的' + this.name);
            }
            return obj
        }

        // new  this 指向了这个obj
        function dog(name, age) {
            // const obj = {};
            this.name = name;
            this.age = age;
            // this.say = function () {
            //     console.log('有一只' + this.age + '岁的' + this.name);
            // }
            // return obj
        }

        // new 出现了   解决了血缘关系   也没有解决内存共享的问题


        // prototype  专门给实例化对象提供公共的属性和方法
        dog.prototype.say = function() {}    // say方法属于prototype


        // const d1 = new dog() 
        // d1.say()   报错


        // __proto__  原型链  d1.__proto__  == dog.prototype   dog.prototype.__proto__
        //                    d1.constructor  == dog




        // window.baidu.sug()

    </script>

</body>

</html>